<?php
/**
 * php 错误处理
 * Created by PhpStorm.
 * User: yulongyang
 * Date: 2017/3/1
 * Time: 上午10:07
 */

// 开启自定义错误处理
$error_handle = set_error_handler('custom_error_handle');

function custom_error_handle($errno, $errstr, $errfile, $errline){
    // 自己定义的错误处理的函数
    // 会按照每天不同的错误级别生成不同的日志文件
    $log_files = "PHP_log_%s".date('Ymd').'.log';
    $now = date('Y-m-d H:s:i');
    $template_str = "$now %s on line $errline in $errfile:$errstr\n";
    $log_str = '';
    switch ($errno) {
        case E_USER_ERROR :
            $log_files = sprintf($log_files, 'ERROR');
            $log_str = sprintf($template_str, 'Fatal error');
            break;
        case E_USER_WARNING:
            $log_files = sprintf($log_files, 'WARNING');
            $log_str = sprintf($template_str, 'warning');
            break;
        case E_USER_NOTICE:
            $log_files = sprintf($log_files, 'NOTICE');
            $log_str = sprintf($template_str, 'notice');
            break;
    }
    
    if ($log_str != '') {
        file_put_contents($log_files, $log_str, FILE_APPEND);
    }
    
    return TRUE;
}
// trigger_error() 函数可以抛出 error_reporting级别一样的错误, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE;
//  测试方法
function notice($test){
    if (!is_array($test) || empty($test)) {
        trigger_error("Input value not array", E_USER_NOTICE);
        return FALSE;
    }
    
    return TRUE;
}

function warming($test){
    if (!is_int($test)) {
        trigger_error('Input value is not number', E_USER_WARNING);
        return FALSE;
    }
    
    return TRUE;
}

//error('bac');
notice('test');
warming('test');

// set_error_handle() 函数是用来处理用户自定义错误的, 而 set_exception_handle() 是用来处理系统为捕获的错误的
// set_handle_error()  demo

function exception_handle($exception){
    echo "Uncaught Exception : ".$exception->getMessage()." \n";
}

set_exception_handler('exception_handle');

throw new Exception('Uncaught Exception');
//echo "Not Exception\n";

